Label Encoding
📋 문서 버전
이 문서는 2개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.
Label Encoding
개요
**Label Encoding라벨 인코딩)은주형 데이터(c data)를 머신러닝 모델이 처리할 수 있도록 정수형 숫자로 변환하는 기법 중 하나입니다. 머러닝 알고리즘 일반적으로 텍스트 형태의 범주형 변수를 직접 처리할 수 없으므로 이러한 변수를 수치형으로 변환하는처리 과정이 필수적입니다. Label Encoding은 각 범주(category)에 고유한 정수 값을 할당함으로써 이 문제를 해결합니다.
예를 들어, 색상 데이터가 ["빨강", "파랑", "초록"]
일 경우, Label Encoding을 통해 각각 0
, 1
, 2
와 같이 정수로 매핑할 수 있습니다. 이 방법은 간단하고 직관적이지만, 범주 간에 임의의 순서를 부여할 수 있기 때문에 주의가 필요합니다.
Label Encoding의 원리
기본 개념
Label Encoding은 범주형 변수의 각 고유 값을 정수(보통 0부터 시작)로 일대일 대응시킵니다. 변환 후의 데이터는 여전히 범주형이지만, 숫자 형태로 표현되어 모델 입력에 적합해집니다.
예시: | 색상 | Label Encoded | |----------|----------------| | 빨강 | 0 | | 파랑 | 1 | | 초록 | 2 |
사용 시기
Label Encoding은 다음과 같은 상황에서 유용합니다:
- 순서형 범주(ordinal categorical data)에 적합합니다. 예:
["낮음", "중간", "높음"]
→0, 1, 2
. 이 경우 숫자의 크기 순서가 의미를 가지므로 Label Encoding이 자연스럽습니다. - 모델이 범주 간의 순서를 고려하지 않아도 되는 경우, 또는 알고리즘이 순서를 인식하지 않는 경우에 사용할 수 있습니다.
Label Encoding의 장단점
장점
- 간단하고 직관적: 구현이 매우 쉬우며, 데이터의 차원을 늘리지 않습니다.
- 메모리 효율성: One-Hot Encoding과 달리, 새로운 열(column)을 생성하지 않기 때문에 데이터 크기가 작아집니다.
- 고유값이 많은 경우 유리: 범주의 수가 매우 많을 경우(예: 100개 이상), One-Hot Encoding은 차원 폭발을 유발할 수 있으므로 Label Encoding이 더 효율적입니다.
단점
- 의도하지 않은 순서 정보 유입: Label Encoding은 정수를 할당하면서 임의의 순서를 부여합니다. 예를 들어,
["사과", "바나나", "오렌지"]
에0, 1, 2
를 할당하면, 모델이 "오렌지 > 바나나 > 사과"라는 순서를 오해할 수 있습니다. - 비모델 기반 알고리즘에 부적합: 대부분의 머신러닝 알고리즘(특히 선형 회귀, 로지스틱 회귀 등)은 숫자의 크기를 거리 또는 순서로 해석하기 때문에, 명목형 범주(nominal categorical data)에 Label Encoding을 적용하면 성능 저하를 초래할 수 있습니다.
Label Encoding과 One-Hot Encoding 비교
특성 | Label Encoding | One-Hot Encoding |
---|---|---|
차원 증가 | 없음 | 있음 (범주 수만큼 열 추가) |
순서 정보 생성 여부 | 있음 (문제가 될 수 있음) | 없음 |
메모리 사용량 | 낮음 | 높음 (고유값 많을수록 급증) |
적합한 데이터 유형 | 순서형 범주 | 명목형 범주 |
모델 해석의 왜곡 가능성 | 높음 | 낮음 |
🔔 Tip: 명목형 범주(예: 국가, 성별, 도시명)에는 One-Hot Encoding 또는 Target Encoding, Embedding 등이 더 적합합니다.
Python에서의 구현 예시
Scikit-learn의 LabelEncoder
를 사용하면 쉽게 Label Encoding을 수행할 수 있습니다.
from sklearn.preprocessing import LabelEncoder
import pandas as pd
# 샘플 데이터
data = pd.DataFrame({
'색상': ['빨강', '파랑', '초록', '파랑', '빨강']
})
# Label Encoder 객체 생성 및 적용
le = LabelEncoder()
data['색상_encoded'] = le.fit_transform(data['색상'])
print(data)
출력 결과:
색상 색상_encoded
0 빨강 1
1 파랑 0
2 초록 2
3 파랑 0
4 빨강 1
⚠️ 주의:
LabelEncoder
는 학습 데이터에만.fit_transform()
을 적용하고, 테스트 데이터에는.transform()
만 사용해야 합니다. 잘못된 적용은 데이터 누수(data leakage)를 유발할 수 있습니다.
고급 활용 및 대안
1. 순서형 데이터에 Label Encoding 사용
순서가 중요한 경우, 사용자가 직접 매핑을 정의할 수 있습니다.
mapping = {"낮음": 0, "중간": 1, "높음": 2}
data['등급_encoded'] = data['등급'].map(mapping)
2. 대안 기법
- One-Hot Encoding:
pd.get_dummies()
또는sklearn.preprocessing.OneHotEncoder
- Target Encoding: 범주별 타겟 평균값으로 인코딩 (회귀/분류 문제에 유용)
- Embedding: 딥러닝에서 범주형 변수를 고차원 벡터로 변환
참고 자료 및 관련 문서
- Scikit-learn LabelEncoder 문서
- Pandas get_dummies
- 데이터 전처리 가이드: "Feature Engineering for Machine Learning", O'Reilly
Label Encoding은 범주형 데이터 전처리의 기본 도구이지만, 데이터의 성격과 사용하는 모델에 따라 적절한 인코딩 방식을 선택하는 것이 중요합니다. 특히 명목형 데이터에는 주의를 기울여야 하며, 필요시 더 정교한 인코딩 기법을 고려해야 합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.